package com.five.pojo.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 订单详情展示 VO（向前端返回的订单完整信息）
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class OrderDetailVO  implements Serializable {

    // ====================== 订单主表信息 ======================
    /**
     * 订单ID
     */
    private Long id;

    /**
     * 订单编号
     */
    private String orderNo;

    /**
     * 用户ID（可根据需求决定是否返回，敏感信息可脱敏）
     */
    private Long userId;

    /**
     * 订单总金额（元）
     */
    private BigDecimal totalAmount;

    /**
     * 实付金额（元）
     */
    private BigDecimal payAmount;

    /**
     * 优惠金额（元）
     */
    private BigDecimal discountAmount;

    /**
     * 运费金额（元）
     */
    private BigDecimal freightAmount;

    /**
     * 订单状态编码（如 0-待付款）
     */
    private Integer orderStatus;

    /**
     * 订单状态描述（如“待付款”，前端直接展示）
     */
    private String orderStatusDesc;

    /**
     * 支付方式编码（如 1-微信支付）
     */
    private Integer payType;

    /**
     * 支付方式描述（如“微信支付”，前端直接展示）
     */
    private String payTypeDesc;

    /**
     * 支付时间
     */
    private LocalDateTime payTime;

    /**
     * 发货时间
     */
    private LocalDateTime deliveryTime;

    /**
     * 确认收货时间
     */
    private LocalDateTime receiveTime;

    /**
     * 取消时间
     */
    private LocalDateTime cancelTime;

    /**
     * 收货人姓名
     */
    private String receiverName;

    /**
     * 收货人电话（可脱敏，如 138****6789）
     */
    private String receiverPhone;

    /**
     * 收货地址
     */
    private String receiverAddress;

    /**
     * 订单备注
     */
    private String remark;

    /**
     * 订单创建时间
     */
    private LocalDateTime createTime;


    // ====================== 订单明细列表 ======================
    /**
     * 订单包含的商品明细列表
     */
    private List<OrderItemVO> orderItems;


    // ====================== 内部商品明细 VO ======================
    /**
     * 订单商品明细展示类（嵌套在 OrderDetailVO 中）
     */
    @Data
    public static class OrderItemVO  implements Serializable{
        /**
         * 明细ID
         */
        private Long id;

        /**
         * 商品ID
         */
        private Long productId;

        /**
         * 商品名称
         */
        private String productName;

        /**
         * 商品图片URL
         */
        private String productImage;

        /**
         * 购买时的单价（元）
         */
        private BigDecimal productPrice;

        /**
         * 购买数量
         */
        private Integer quantity;

        /**
         * 商品小计（元）
         */
        private BigDecimal totalPrice;
    }
}